package com.yc.springboot.biz;

import org.springframework.data.redis.connection.BitFieldSubCommands;
import org.springframework.data.redis.connection.RedisStringCommands;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

@Service
public class BoardBiz {

    @Resource
    JdbcTemplate jdbc;
    @Resource  // Reids 操作模板对象
    RedisTemplate redisTemplate;

    public List<Map<String, Object>> queryAll() {
        final List<Map<String, Object>> list;
        // 检查reids是否有缓存的数据
        final Set<String> keys = redisTemplate.keys("b_*");
        // 如果有, 读取缓存数据
        if(keys.isEmpty() == false){
            System.out.println("========= 从Redis数据库读取数据 ===========");
            list = new ArrayList<>();
            // 如果没有, 查询数据 ==> 存入到redis中
            keys.forEach(key->{
                // 从redis获取对应的 hash 类型数据 ==> 一个板块信息
                final Map<Object, Object> map = redisTemplate.opsForHash().entries(key);
                // 转成 Map<String,Object>
                Map<String,Object> map1 = new HashMap<>();
                map.forEach((k,v)->{
                    map1.put(k.toString(), v);
                });
                // 加入集合
                list.add(map1);
            });
        } else {
            System.out.println("========= 从MySQL数据库读取数据 ===========");
            String sql = "select * from tbl_board";
            list = jdbc.queryForList(sql);
            list.forEach(map -> {
                // 构建 key 值
                String key = "b_" + map.get("boardid");
                // 保存到 redis hash 中
                redisTemplate.opsForHash().putAll(key, map);
            });
        }
        return list;
    }
}
